﻿#define _CRT_SECURE_NO_WARNINGS 1
//描述
//Lily上课时使用字母数字图片教小朋友们学习英语单词，每次都需要把这些图片按照大小（ASCII码值从小到大）排列收好。
//请大家给Lily帮忙，通过C语言解决。
//
//本题含有多组样例输入。
//
//数据范围：每组输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000
//
//输入描述：
//Lily使用的图片包括"A"到"Z"、"a"到"z"、"0"到"9"。输入字母或数字个数不超过1024。
//
//输出描述：
//Lily的所有图片按照从小到大的顺序输出
//
//示例1
//输入：
//Ihave1nose2hands10fingers
//复制
//输出：
//0112Iaadeeefghhinnnorsssv

//#include<stdio.h>
//int main()
//{
//    char arr[1024] = { 0 };
//    int len, i;
//    while (scanf("%s", arr) != EOF)
//    {
//        len = strlen(arr);
//        int a[1025] = { 0 };
//        for (i = 0; i < len; i++)
//        {
//            a[arr[i]]++;
//        }
//        for (i = 0; i < 1025; i++)
//        {
//            while (a[i] != 0) {
//                printf("%c", i);
//                a[i]--;
//            }
//        }
//        printf("\n");
//    }
//
//    return 0;
//}
//给你一个整数数组 nums ，请计算数组的 中心下标 。
//
//数组 中心下标 是数组的一个下标，其左侧所有元素相加的和等于右侧所有元素相加的和。
//
//如果中心下标位于数组最左端，那么左侧数之和视为 0 ，因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
//
//如果数组有多个中心下标，应该返回 最靠近左边 的那一个。如果数组不存在中心下标，返回 - 1 。
//
//
//
//示例 1：
//
//输入：nums = [1, 7, 3, 6, 5, 6]
//输出：3
//解释：
//中心下标是 3 。
//左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ，
//右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ，二者相等。
//

//#include<stdio.h>
//int pivotIndex(int* nums, int numsSize)
//{
//    int i = 0, j = 0;
//    for (i = 0; i < numsSize; i++)
//    {
//        int sum1 = 0;
//        int sum2 = 0;
//        for (j = 0; j < numsSize; j++)
//        {
//            if (j < i)
//                sum1 += nums[j];
//            else if (j > i)
//                sum2 += nums[j];
//        }
//        if (sum1 == sum2)
//            return i;
//    }
//    return -1;
//}
//int main()
//{
//    int arr[] = {-1,-1,-1,-1,-1,-1};
//    int ret=pivotIndex(arr, 6);
//    printf("%d", ret);
//
//    return 0;
//}
//描述
//编写一个函数，计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内(0~127 ，包括 0 和 127)，
//换行表示结束符，不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
//例如，对于字符串 abaca 而言，有 a、b、c 三种不同的字符，因此输出 3 。
//
//数据范围： 1 \le n \le 500 \1≤n≤500
//输入描述：
//输入一行没有空格的字符串。
//
//输出描述：
//输出 输入字符串 中范围在(0~127，包括0和127)字符的种数。
//
//示例1
//输入：
//abc
//复制
//输出：
//3
//#include<stdio.h>
//int main()
//{
//    char arr1[500] = { 0 };
//    int arr2[128] = { 0 };
//    char* str = arr1;
//    int count = 0;
//    scanf("%s", arr1);
//    while (*str != '\0')
//    {
//        if (arr2[*str] != 1)
//            count++;
//        arr2[*str] = 1;
//        str++;
//    }
//    printf("%d", count);
//    return 0;
//}
//给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n / 2 ⌋ 的元素。
//
//你可以假设数组是非空的，并且给定的数组总是存在多数元素。
//
//
//
//示例 1：
//
//输入：[3, 2, 3]
//输出：3

//其实就是两种数字，一种就是
#include<stdio.h>
//int cmp(const int* a, const int* b)
//{
//    return *a - *b;
//}
//int majorityElement(int* nums, int numsSize)
//{
//    int n = numsSize / 2;
//    int ret = 0;
//    qsort(nums, numsSize, sizeof(int), cmp);
//    int i = 0, j = 1;
//    while (j < numsSize)
//    {
//        if (nums[i] == nums[j])
//        {
//            j++;
//        }
//        else
//        {
//            if (j - i > n)
//                return  nums[i];
//            else
//                i = j;
//            j++;
//        }
//    }
//}
//法二
//int majorityElement(int* nums, int numsSize) {
//    int count = 1;
//    int tmp = nums[0];
//    for (int i = 1; i < numsSize; i++)
//    {
//        if (tmp == nums[i])
//            count++;
//        else {
//            count--;
//            if (count == 0)
//                tmp = nums[i + 1];
//        }
//    }
//    return tmp;
//}
//int main()
//{
//    int nums[] = { 3,2,3 };
//    int count = majorityElement(nums,3 );
//    printf("%d", count);
//}
//自除数 是指可以被它包含的每一位数除尽的数。
//
//例如，128 是一个自除数，因为 128 % 1 == 0，128 % 2 == 0，128 % 8 == 0。
//
//还有，自除数不允许包含 0 （每一位都不能是0）。
//
//给定上边界和下边界数字，输出一个列表，列表的元素是边界（含边界）内所有的自除数。
//
//示例 1：
//
//输入：
//上边界left = 1, 下边界right = 22
//输出：[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
//注意：
//
//每个输入参数的边界满足 1 <= left <= right <= 10000。

//int* selfDividingNumbers(int left, int right, int* returnSize)
//{
//    *returnSize = 0;
//    int* ret = (int*)calloc(1000, sizeof(int));
//    int i = 0, flag = 0, n = 0, a = 0;
//    for (i = left; i <= right; i++)
//    {
//        n = i;
//        while (n)
//        {
//            a = n % 10;
//            if (a == 0 || (i % a) != 0)
//            {
//                flag = 1;
//                break;
//            }
//            n = n / 10;
//        }
//        if (flag == 0)
//        {
//            ret[(*returnSize)++] = i;
//        }
//        flag = 0;
//    }
//    return ret;
//}
//给你一个整数数组 nums，返回 数组 answer ，其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
//
//题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。
//
//请不要使用除法，且在 O(n) 时间复杂度内完成此题。
//
//
//
//示例 1:
//
//输入: nums = [1, 2, 3, 4]
//输出 : [24, 12, 8, 6]


//int* productExceptSelf(int* nums, int numsSize, int* returnSize)
//{
//    *returnSize = numsSize;
//    int* ret = (int*)malloc(numsSize * sizeof(int));
//    int i, left = 1, right = 1;
//    for (i = 0; i < numsSize; i++)
//    {
//        ret[i] = left;
//        left *= nums[i];
//    }
//    for (i = numsSize - 1; i >= 0; i--)
//    {
//        ret[i] *= right;
//        right *= nums[i];
//    }
//    return ret;
//}
//描述
//写一个函数，求两个整数之和，要求在函数体内不得使用 + 、 - 、 * 、 / 四则运算符号。
//
//数据范围：两个数都满足 - 10 \le n \le 1000−10≤n≤1000
//进阶：空间复杂度 O(1)O(1)，时间复杂度 O(1)O(1)
//示例1
//输入：
//1, 2
//复制
//返回值：
//3
//int Add(int num1, int num2)
//{
//    while (num2 != 0)
//    {
//        int ret = num1 ^ num2;
//        num2 = (num1 & num2) << 1;
//        num1 = ret;
//    }
//    return num1;
//}
#include<stdio.h>
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize)
{
   
}
int main()
{
    int nums[] = { 4,3,2,7,8,2,3,1 };
    int x = 0;
    int* ret = findDisappearedNumbers(nums, 8, &x);
    for (int i = 0; i < x; i++)
    {
        printf("%d ", ret[i]);
    }
    return 0;
}
